// import com.alibaba.druid.sql.ast.SQLParameter;
// import com.alibaba.druid.sql.ast.SQLStatement;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"

class SQLBlockStatement : public SQLStatementImpl
{
public:
  string_ptr labelName;
  string_ptr endLabel;
  SQLParameter_list_ptr parameters;
  SQLStatement_list_ptr statementList;
  SQLStatement_ptr exception;
  BOOL_ptr endOfCommit;

  SQLBlockStatement();
  SHAREDOBJECT(SQLBlockStatement);

  SQLStatement_list_ptr getStatementList();

  void setStatementList(SQLStatement_list_ptr statementList);

  string_ptr getLabelName();

  void setLabelName(string_ptr labelName);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  SQLParameter_list_ptr getParameters();

  void setParameters(SQLParameter_list_ptr parameters);

  SQLStatement_ptr getException();

  void setException(SQLStatement_ptr exception);

  string_ptr getEndLabel();

  void setEndLabel(string_ptr endLabel);

  SQLObject_ptr clone();

  SQLParameter_ptr findParameter(long hash);

  BOOL_ptr isEndOfCommit();

  void setEndOfCommit(BOOL_ptr value);

  virtual string_ptr getClass() { return make_string_ptr("SQLBlockStatement"); }
};
